home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / gemfsc18.lzh / AESSRC18.LZH / AESFUNCS / OBJSTCHG.C < prev    next >
C/C++ Source or Header  |  1992-03-25  |  1KB  |  49 lines

  1. /**************************************************************************
  2.  * OBJSTCHG.C - Change object state, with optional redraw.
  3.  *************************************************************************/
  4.  
  5. #include "gemfast.h"
  6.  
  7. #ifndef NULL
  8.   #define NULL 0L
  9. #endif 
  10.  
  11. void obj_stchange(ptree, object, newstate, drawflag,optional_clip)
  12.     register OBJECT *ptree;
  13.     int             object;
  14.     int             newstate;
  15.     int             drawflag;
  16.     GRECT           *optional_clip;
  17. {
  18.     GRECT           *pclip;
  19.     
  20. /*
  21.  * check the newstate value. if the high bit is set, AND the newstate
  22.  * with the current state, else OR them.
  23.  */
  24.  
  25.     if (newstate & 0x8000) {
  26.         newstate &= ptree[object].ob_state;
  27.     }
  28.     else {
  29.         newstate |= ptree[object].ob_state;
  30.     }
  31.  
  32. /*
  33.  * if the drawflag is set, redraw the object.  
  34.  * if the drawflag says a clipping rectangle was passed, use it, 
  35.  * else use root object as the clipping rectangle for the redraw.
  36.  */
  37.  
  38.     if (drawflag == OBJ_CLIPDRAW) {
  39.         drawflag = OBJ_WITHDRAW;    // xlate from 2 to 1
  40.         pclip = optional_clip;
  41.     } else {
  42.         pclip = (GRECT *)&ptree->ob_x;
  43.     }
  44.     
  45.     objc_change(ptree, object, 0, *pclip, newstate, drawflag);
  46.     
  47. }
  48.  
  49.